constint N = 5e4 + 10; int T, a, b, d, tot; int miu[N], sum[N], pri[N]; bool vis[N];
voidget_prefix(){ miu[1] = 1; for (int i = 2; i <= 50000; i++) { if (!vis[i]) pri[++tot] = i, miu[i] = -1; for (int j = 1; j <= tot && i * pri[j] <= 50000; j++) { vis[i * pri[j]] = 1; if (i % pri[j] == 0) { miu[i * pri[j]] = 0; break; } else miu[i * pri[j]] = -miu[i]; } } for (int i = 1; i <= 50000; i++) sum[i] = sum[i - 1] + miu[i]; }
intcal(int n, int m){ if (n > m) swap(n, m); int ans = 0, pos; for (int i = 1; i <= n; i = pos + 1) { pos = min(n / (n / i), m / (m / i)); ans += (sum[pos] - sum[i - 1]) * (n / i) * (m / i); } return ans; }
intmain(){ ios::sync_with_stdio(false); get_prefix(); cin >> T; while (T--) { cin >> a >> b >> d; printf("%d\n", cal(a / d, b / d)); } return0; }